package ru.mirent.url;

import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

import static java.util.Objects.isNull;

// TODO Написать тесты
public class UrlQueryParamsSplitDecoded implements Function<String, Map<String, String>> {

    @Override
    public Map<String, String> apply(String url) {
        Map<String, String> queryParams = new HashMap<>();

        try {
            // Дополнительное преобразование в класс URL требуется для проверки корректности, т.к. класс
            // URI имеет более широкую спецификацию и в случае ошибки не обработает ее.
            URI uri = new URL(url).toURI();
            String query = uri.getQuery();
            if (isNull(query)) {
                return queryParams;
            }
            String[] pairs = query.split("&");
            for (String pair: pairs) {
                int num = pair.indexOf("=");
                if (num > 0) {
                    String key = pair.substring(0, num);
                    String value = pair.substring(num + 1);
                    queryParams.put(key, value);
                }
            }
        } catch (MalformedURLException | URISyntaxException e) {
            throw new RuntimeException(e);
        }

        return queryParams;
    }
}
